import json
import logging
import time

from group_profile.llm.agent import AIAgent

"""意图识别智能体，负责识别用户的意图为以下4个：
        0.基础对话
        1.探索群体的全局情况
        2.探索群体的局部情况
        3.探索具体的群体
        
    将用户意图识别为程序可解析对象，供主对话流程判断和使用
"""


class PurposeAgent(AIAgent):

    def get_system_prompt(self):
        prompt = """
        你的对外身份是自然人洞察智能助手，内部身份是对话意图识别人工智能，你需要理解用户意图并引导用户进行群体的探索，探索的总体流程如下：
        0.基础对话，用户没有提到群体或群体的近义词，当用户没有提到群体的时候就属于此情况，你的回答需要引导用户进行步骤1的探索
        1.探索群体的全局情况，用户提到了群体或近义词，但没有提及筛选群体的条件
        2.探索群体的局部情况，用户提到了群体或近义词且用某城市、行政区等地区名词修饰或限定群体，但是没有提到群体id
        3.探索具体的群体，用户提到了群体或近义词且提到了具体的群体id
        
        群体的概念：通过图算法和通信行业数据挖掘出来的自然人节点集合，经过加工处理后，以下是一个具体群体的例子：
        id:1
        用户数：32
        基站数：1
        群体主要地址：北京市朝阳区建国路87号
        群体主要经纬度：(39.928553,116.633287)
        群体城市：北京市
        群体行政区：朝阳区
        用户平均月资费：228.22125
        用户高频APP(最高流量)：知乎-2407.7MB
        用户高频APP(最高次数)：知乎-243次
        用户高频APP(最长时间)：知乎-3676.9MIN
        群组标签：['知乎高频群体', '朝阳区', '低资费群体']
        
        你的任务：
        准备json对象并填写如下值：
        1.重复用户的问题，填写在json的question字段中
        2.理解用户的意图，将意图判断依据填写在json的reason字段中，
        2.判断用户的意图，将意图判断结果填写在json的purpose字段中，值是流程编号0-3，
        5.当用户意图为2或3时，判断用户查询群体的条件并插入value列表字段中，当意图为2时，插入一个或多个字符串类型的城市名；当意图为3时，插入一个或多个int类型的id
        
        格式请参考如下：
        {
            "question":"",
            "reason": "",
            "purpose": 0,
            "value": []
        }
        
        请确保你的回答全文以{开头并以}结尾，可被直接转为json对象，不要以```json开头，不要以```json开头，不要以```json开头。
        """

        return prompt

    def purpose_chat(self, user_prompt, messages):
        try:
            start_time = time.time()
            response = self.stream_complete(user_prompt, messages)
            collected_chunks = []
            collected_messages = []
            # 通过事件流迭代
            for chunk in response:
                chunk_time = time.time() - start_time
                collected_chunks.append(chunk)
                chunk_message = chunk.choices[0].delta
                collected_messages.append(chunk_message)
                # print(f"Message received {chunk_time:.2f} seconds after request: {chunk_message}")
            #     print(chunk.choices[0].delta.content, end='')
            #
            # print()

            # 打印完整响应和文本
            full_reply_content = ''.join([m.content for m in collected_messages])
            logging.info(f"Full conversation received: {full_reply_content}")
            return json.loads(full_reply_content.removeprefix("```json").removesuffix("```"))
        except Exception as e:
            final_response = "对不起，我现在有点问题，请尝试问另外一个问题"

        print(final_response)
        return {
                    "question": user_prompt,
                    "reason": "",
                    "purpose": -1,
                    "value": []
        }





if __name__ == '__main__':
    agent = PurposeAgent()
    # 记录请求发送前的时间
    response1 = agent.purpose_chat("展示群体1", [])
    # response1 = agent.purpose_chat("展示北京的群体", [])

    print(f"Full conversation received: {response1}")
